TestNG-তে দীর্ঘ সময় ধরে চলা টেস্ট মেথডের এক্সিকিউশন সীমিত করতে Timeout ফিচার ব্যবহার করা হয়। Timeout ফিচারের মাধ্যমে নির্ধারিত সময়ের মধ্যে টেস্ট সম্পন্ন না হলে সেটিকে ব্যর্থ (fail) হিসেবে চিহ্নিত করা যায়। এটি দীর্ঘ সময়ের টেস্ট বা অপ্রত্যাশিত লুপ এড়ানোর জন্য বিশেষভাবে কার্যকর।
Timeout কি?
Timeout হলো একটি প্যারামিটার, যা TestNG-তে টেস্ট মেথডের এক্সিকিউশন সময় নির্ধারণ করে। নির্ধারিত সময়ের মধ্যে টেস্ট শেষ না হলে, TestNG মেথডটিকে ব্যর্থ হিসেবে চিহ্নিত করে।
Timeout ব্যবহার করার উপায়
১. @Test এনোটেশনের মধ্যে timeOut প্যারামিটার
TestNG-তে @Test এনোটেশনে timeOut প্যারামিটার ব্যবহার করে নির্দিষ্ট টেস্টের জন্য টাইমআউট সেট করা যায়।
উদাহরণ:
import org.testng.annotations.Test;
public class TimeoutExample {
@Test(timeOut = 2000) // টাইমআউট ২০০০ মিলিসেকেন্ড বা ২ সেকেন্ড
public void testWithTimeout() throws InterruptedException {
Thread.sleep(3000); // ৩ সেকেন্ড স্লিপ
System.out.println("This test will fail due to timeout.");
}
@Test(timeOut = 5000)
public void testWithinTimeout() throws InterruptedException {
Thread.sleep(1000); // ১ সেকেন্ড স্লিপ
System.out.println("This test will pass as it finishes within timeout.");
}
}
আউটপুট:
testWithTimeout: ব্যর্থ হবে কারণ এটি ২ সেকেন্ডের মধ্যে শেষ হয়নি।testWithinTimeout: সফল হবে কারণ এটি ৫ সেকেন্ডের মধ্যে সম্পন্ন হয়েছে।
২. @Test লেভেলে গ্রুপ টাইমআউট সেট করা
TestNG XML ফাইল ব্যবহার করে টেস্ট মেথডের জন্য টাইমআউট সেট করা যায়।
উদাহরণ XML কনফিগারেশন:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="TestSuite">
<test name="TimeoutTest" time-out="3000">
<classes>
<class name="com.example.tests.TimeoutExample"/>
</classes>
</test>
</suite>
কীভাবে কাজ করে:
- XML ফাইলের
time-outঅ্যাট্রিবিউটের মাধ্যমে পুরো টেস্টের জন্য একটি ডিফল্ট টাইমআউট নির্ধারণ করা যায়। - এক্সিকিউশন নির্ধারিত সময়ের মধ্যে সম্পন্ন না হলে টেস্ট ব্যর্থ হবে।
ডেটা ড্রিভেন টেস্টিংয়ে টাইমআউট
যদি আপনি ডেটা ড্রিভেন টেস্টিং করেন, তাহলে টাইমআউট প্যারামিটার প্রতিটি টেস্ট ইনভোকেশনের জন্য প্রযোজ্য।
উদাহরণ:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataDrivenTimeoutExample {
@DataProvider(name = "dataProvider")
public Object[][] dataProvider() {
return new Object[][]{
{1, 1000},
{2, 3000}
};
}
@Test(dataProvider = "dataProvider", timeOut = 2000)
public void testWithData(int id, int delay) throws InterruptedException {
Thread.sleep(delay); // ডিলের সময় অনুযায়ী স্লিপ
System.out.println("Test with ID: " + id + " completed.");
}
}
আউটপুট:
- প্রথম ইনভোকেশন: সফল হবে কারণ এটি ১ সেকেন্ডের মধ্যে শেষ হয়।
- দ্বিতীয় ইনভোকেশন: ব্যর্থ হবে কারণ এটি ৩ সেকেন্ডের মধ্যে শেষ হয়নি।
শর্তসাপেক্ষ টাইমআউট ম্যানেজমেন্ট
কিছু বিশেষ ক্ষেত্রে প্রোগ্রামেটিকভাবে টাইমআউট পরিচালনা করার প্রয়োজন হতে পারে। এই ক্ষেত্রে ExecutorService ব্যবহার করা যেতে পারে।
উদাহরণ:
import org.testng.annotations.Test;
import java.util.concurrent.*;
public class ConditionalTimeoutExample {
@Test
public void testWithCustomTimeout() {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future = executor.submit(() -> {
try {
Thread.sleep(3000); // ৩ সেকেন্ড স্লিপ
System.out.println("Task completed.");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
try {
future.get(2, TimeUnit.SECONDS); // ২ সেকেন্ডের টাইমআউট
} catch (TimeoutException e) {
System.out.println("Test failed due to timeout.");
} catch (Exception e) {
e.printStackTrace();
} finally {
executor.shutdown();
}
}
}
সারাংশ
TestNG-তে টাইমআউট ফিচার দীর্ঘ রানিং টেস্ট মেথড সীমিত করার জন্য অত্যন্ত কার্যকর।
@TestএনোটেশনেtimeOutপ্যারামিটার দিয়ে সরাসরি টাইমআউট সেট করা যায়।- XML কনফিগারেশন দিয়ে গ্রুপ বা টেস্ট লেভেলে টাইমআউট নির্ধারণ করা সম্ভব।
- ডেটা ড্রিভেন এবং শর্তসাপেক্ষ টেস্টেও টাইমআউট কার্যকরভাবে ব্যবহার করা যায়।
এই ফিচার টেস্টিং প্রক্রিয়ায় অপ্রত্যাশিত লুপ বা দীর্ঘ এক্সিকিউশন এড়াতে সাহায্য করে এবং টেস্ট রান টাইম সাশ্রয় করে।